#include "mainwidget.h"
#include "ui_mainwidget.h"

MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWidget),

    mainLayout(new QVBoxLayout()),
    stanLayout(new QHBoxLayout()),
    terenLayout(new QHBoxLayout()),
    wladzeLayout(new QHBoxLayout()),
    iloscStudentowLayout(new QHBoxLayout()),
    stosunekMKLayout(new QHBoxLayout()),
    wydatkiLayout(new QHBoxLayout()),
    procentFinansowanychLayout(new QHBoxLayout()),
    liczbaAplikujacychLayout(new QHBoxLayout()),
    procentPrzyjetychLayout(new QHBoxLayout()),
    jakoscUczelniLayout(new QHBoxLayout()),
    stypendiaLayout(new QHBoxLayout()),
    jakoscZyciaLayout(new QHBoxLayout()),
    kierunekLayout(new QHBoxLayout()),

    stanBox(new QComboBox),
    terenBox(new QComboBox),
    wladzeBox(new QComboBox),
    iloscStudentowBox(new QComboBox),
    stosunekMKBox(new QComboBox),
    wydatkiBox(new QComboBox),
    procentFinansowanychBox(new QComboBox),
    liczbaAplikujacychBox(new QComboBox),
    procentPrzyjetychBox(new QComboBox),
    jakoscUczelniBox(new QComboBox),
    stypendiaBox(new QComboBox),
    jakoscZyciaBox(new QComboBox),
    kierunekBox(new QComboBox),

    stanLabel(new QLabel("Stan")),
    terenLabel(new QLabel("Lokalizacja")),
    wladzeLabel(new QLabel("Wladze uczelni")),
    iloscStudentowLabel(new QLabel("Liczba studentow")),
    stosunekMKLabel(new QLabel("Stosunek mezczyzni:kobiety")),
    wydatkiLabel(new QLabel("Srednie wydatki")),
    procentFinansowanychLabel(new QLabel("Procent pobierajacych dofinansowanie")),
    liczbaAplikujacychLabel(new QLabel("Liczba aplikujacych")),
    procentPrzyjetychLabel(new QLabel("Procent przyjetych")),
    jakoscUczelniLabel(new QLabel("Jakosc uczelni")),
    stypendiaLabel(new QLabel("Jakosc stypendiow")),
    jakoscZyciaLabel(new QLabel("Jakosc zycia")),
    kierunekLabel(new QLabel("Zainteresowania")),
    wynikLabel(new QLabel("Wynik:")),

    szukajButton(new QPushButton("Szukaj")),
    wynikText(new QTextEdit())

{
    //ui->setupUi(this);

    connect ( szukajButton, SIGNAL( clicked(bool) ), this, SLOT( slotButtonClicked(bool) ) );

    QHBoxLayout *lay = new QHBoxLayout();
    lay->addWidget(new QLabel("RAZ"));
    lay->addWidget(new QLabel("DWA"));

    //stan
    stanBox->addItem(tr("Alabama"));
    stanBox->addItem(tr("Alaska"));
    stanBox->addItem(tr("Arizona"));
    stanBox->addItem(tr("Arkansas"));
    stanBox->addItem(tr("Connecticut"));
    stanBox->addItem(tr("Dakota Pld"));
    stanBox->addItem(tr("Dakota Pn"));
    stanBox->addItem(tr("Delaware"));
    stanBox->addItem(tr("Floryda"));
    stanBox->addItem(tr("Georgia"));
    stanBox->addItem(tr("Hawaje"));
    stanBox->addItem(tr("Idaho"));
    stanBox->addItem(tr("Ilinois"));
    stanBox->addItem(tr("Indiana"));
    stanBox->addItem(tr("Iowa"));
    stanBox->addItem(tr("Kalifornia"));
    stanBox->addItem(tr("Kansas"));
    stanBox->addItem(tr("Karolina Płd"));
    stanBox->addItem(tr("Karolina Pn"));
    stanBox->addItem(tr("Kentucky"));
    stanBox->addItem(tr("Kolorado"));
    stanBox->addItem(tr("Luizjana"));
    stanBox->addItem(tr("Maine"));
    stanBox->addItem(tr("Meryland"));
    stanBox->addItem(tr("Massachusetts"));
    stanBox->addItem(tr("Michigan"));
    stanBox->addItem(tr("Minesota"));
    stanBox->addItem(tr("Missisipi"));
    stanBox->addItem(tr("Missouri"));
    stanBox->addItem(tr("Montana"));
    stanBox->addItem(tr("Nebraska"));
    stanBox->addItem(tr("Nevada"));
    stanBox->addItem(tr("New Hampshire"));
    stanBox->addItem(tr("New Jersey"));
    stanBox->addItem(tr("Nowy Jork"));
    stanBox->addItem(tr("Nowy Meksyk"));
    stanBox->addItem(tr("Ohio"));
    stanBox->addItem(tr("Oklahoma"));
    stanBox->addItem(tr("Oregon"));
    stanBox->addItem(tr("Pensylwania"));
    stanBox->addItem(tr("Rhode Island"));
    stanBox->addItem(tr("Teksas"));
    stanBox->addItem(tr("Tennessee"));
    stanBox->addItem(tr("Utah"));
    stanBox->addItem(tr("Vermont"));
    stanBox->addItem(tr("Waszyngton"));
    stanBox->addItem(tr("Wirginia"));
    stanBox->addItem(tr("Wirginia Zachodnia"));
    stanBox->addItem(tr("Wisconsin"));
    stanBox->addItem(tr("Wyoming"));
    stanLayout->addWidget(stanLabel);
    stanLayout->addWidget(stanBox);

    //lokalizacja
    terenBox->addItem(tr("Centrum miasta"));
    terenBox->addItem(tr("Przedmiescia"));
    terenBox->addItem(tr("Male miasto"));
    terenLayout->addWidget(terenLabel);
    terenLayout->addWidget(terenBox);

    //wladze
    wladzeBox->addItem(tr("Prywatne"));
    wladzeBox->addItem(tr("Publiczne"));
    wladzeBox->addItem(tr("Stanowe"));
    wladzeLayout->addWidget(wladzeLabel);
    wladzeLayout->addWidget(wladzeBox);

    //ilosc studentow
    iloscStudentowBox->addItem(tr("<5 tys"));
    iloscStudentowBox->addItem(tr("5-10 tys"));
    iloscStudentowBox->addItem(tr("10-15 tys"));
    iloscStudentowBox->addItem(tr("15-20 tys"));
    iloscStudentowBox->addItem(tr(">20 tys"));
    iloscStudentowLayout->addWidget(iloscStudentowLabel);
    iloscStudentowLayout->addWidget(iloscStudentowBox);

    //stosunek M-K
    stosunekMKBox->addItem(tr("<40:60"));
    stosunekMKBox->addItem(tr("40:60"));
    stosunekMKBox->addItem(tr("50:50"));
    stosunekMKBox->addItem(tr(">60:40"));
    stosunekMKLayout->addWidget(stosunekMKLabel);
    stosunekMKLayout->addWidget(stosunekMKBox);

    //srednie wydatki na studiach
    wydatkiBox->addItem(tr("<4000$"));
    wydatkiBox->addItem(tr("<5000$"));
    wydatkiBox->addItem(tr("7000-10000$"));
    wydatkiBox->addItem(tr(">10000$"));
    wydatkiLayout->addWidget(wydatkiLabel);
    wydatkiLayout->addWidget(wydatkiBox);

    procentFinansowanychBox->addItem(tr("0"));
    procentFinansowanychBox->addItem(tr("5"));
    procentFinansowanychBox->addItem(tr("10"));
    procentFinansowanychBox->addItem(tr("15"));
    procentFinansowanychBox->addItem(tr("20"));
    procentFinansowanychBox->addItem(tr("25"));
    procentFinansowanychBox->addItem(tr("30"));
    procentFinansowanychBox->addItem(tr("35"));
    procentFinansowanychBox->addItem(tr("40"));
    procentFinansowanychBox->addItem(tr("45"));
    procentFinansowanychBox->addItem(tr("50"));
    procentFinansowanychBox->addItem(tr("55"));
    procentFinansowanychBox->addItem(tr("60"));
    procentFinansowanychBox->addItem(tr("65"));
    procentFinansowanychBox->addItem(tr("70"));
    procentFinansowanychBox->addItem(tr("75"));
    procentFinansowanychBox->addItem(tr("80"));
    procentFinansowanychBox->addItem(tr("85"));
    procentFinansowanychLayout->addWidget(procentFinansowanychLabel);
    procentFinansowanychLayout->addWidget(procentFinansowanychBox);

    //liczba aplikujacych
    liczbaAplikujacychBox->addItem(tr("<4 tys"));
    liczbaAplikujacychBox->addItem(tr("4-7 tys"));
    liczbaAplikujacychBox->addItem(tr("7-10 tys"));
    liczbaAplikujacychBox->addItem(tr("10-13 tys"));
    liczbaAplikujacychBox->addItem(tr("13-17 tys"));
    liczbaAplikujacychBox->addItem(tr(">17 tys"));
    liczbaAplikujacychLayout->addWidget(liczbaAplikujacychLabel);
    liczbaAplikujacychLayout->addWidget(liczbaAplikujacychBox);

    //procentPrzyjetych
    procentPrzyjetychBox->addItem(tr("30"));
    procentPrzyjetychBox->addItem(tr("35"));
    procentPrzyjetychBox->addItem(tr("40"));
    procentPrzyjetychBox->addItem(tr("45"));
    procentPrzyjetychBox->addItem(tr("50"));
    procentPrzyjetychBox->addItem(tr("55"));
    procentPrzyjetychBox->addItem(tr("60"));
    procentPrzyjetychBox->addItem(tr("65"));
    procentPrzyjetychBox->addItem(tr("70"));
    procentPrzyjetychBox->addItem(tr("75"));
    procentPrzyjetychBox->addItem(tr("80"));
    procentPrzyjetychBox->addItem(tr("85"));
    procentPrzyjetychBox->addItem(tr("90"));
    procentPrzyjetychBox->addItem(tr("95"));
    procentPrzyjetychLayout->addWidget(procentPrzyjetychLabel);
    procentPrzyjetychLayout->addWidget(procentPrzyjetychBox);

    //jakosc uczelni
    jakoscUczelniBox->addItem(tr("1"));
    jakoscUczelniBox->addItem(tr("2"));
    jakoscUczelniBox->addItem(tr("3"));
    jakoscUczelniBox->addItem(tr("4"));
    jakoscUczelniBox->addItem(tr("5"));
    jakoscUczelniLayout->addWidget(jakoscUczelniLabel);
    jakoscUczelniLayout->addWidget(jakoscUczelniBox);

    //stypendia
    stypendiaBox->addItem(tr("1"));
    stypendiaBox->addItem(tr("2"));
    stypendiaBox->addItem(tr("3"));
    stypendiaBox->addItem(tr("4"));
    stypendiaBox->addItem(tr("5"));
    stypendiaLayout->addWidget(stypendiaLabel);
    stypendiaLayout->addWidget(stypendiaBox);

    //jakos zycia
    jakoscZyciaBox->addItem(tr("1"));
    jakoscZyciaBox->addItem(tr("2"));
    jakoscZyciaBox->addItem(tr("3"));
    jakoscZyciaBox->addItem(tr("4"));
    jakoscZyciaBox->addItem(tr("5"));
    jakoscZyciaLayout->addWidget(jakoscZyciaLabel);
    jakoscZyciaLayout->addWidget(jakoscZyciaBox);



    //kierunek studiow

    kierunekBox->addItem(tr("Szkolnictwo"));
    kierunekBox->addItem(tr("Sztuka"));
    kierunekBox->addItem(tr("Historia sztuki"));
    kierunekBox->addItem(tr("Historia"));
    kierunekBox->addItem(tr("Administracja"));
    kierunekBox->addItem(tr("Ekonomia"));
    kierunekBox->addItem(tr("Prawo"));
    //kierunekBox->addItem(tr("Biznes"));
    kierunekBox->addItem(tr("Dziennikarstwo"));
    kierunekBox->addItem(tr("Nauki polityczne"));
    kierunekBox->addItem(tr("Socjologia"));
    kierunekBox->addItem(tr("Komunikacja"));
    kierunekBox->addItem(tr("Psychologia"));
    kierunekBox->addItem(tr("Biologia"));
    kierunekBox->addItem(tr("Medycyna"));
    kierunekBox->addItem(tr("Chemia"));
    kierunekBox->addItem(tr("Pielegniarstwo"));
    kierunekBox->addItem(tr("Ekologia"));
    kierunekBox->addItem(tr("Architektura"));
    kierunekBox->addItem(tr("Inzynieria"));
    kierunekBox->addItem(tr("Informatyka"));
    kierunekBox->addItem(tr("Matematyka"));
    kierunekBox->addItem(tr("Język angieski"));
    kierunekLayout->addWidget(kierunekLabel);
    kierunekLayout->addWidget(kierunekBox);

    //glowny layout
    mainLayout->addLayout(stanLayout);
    mainLayout->addLayout(terenLayout);
    mainLayout->addLayout(wladzeLayout);
    mainLayout->addLayout(iloscStudentowLayout);
    mainLayout->addLayout(stosunekMKLayout);
    mainLayout->addLayout(wydatkiLayout);
    mainLayout->addLayout(procentFinansowanychLayout);
    mainLayout->addLayout(liczbaAplikujacychLayout);
    mainLayout->addLayout(procentPrzyjetychLayout);
    mainLayout->addLayout(jakoscUczelniLayout);
    mainLayout->addLayout(stypendiaLayout);
    mainLayout->addLayout(jakoscZyciaLayout);
    mainLayout->addLayout(kierunekLayout);
    mainLayout->addWidget(szukajButton);

    data = new Data((char*)"../rrr1.csv");
    data->read2();

    int qSize = 13;
    //query test
    for(int i = 0 ; i < qSize; ++i)
        query.push_back(3);

    knn = new KNN(data);


        //  data->save((char*)"/home/nesta/qt projects/eksploracjadanych/records.data");
        //this->setFixedSize(500,500);
        setLayout(mainLayout);



}

void MainWidget::slotButtonClicked(bool checked){
    int stan = stanBox->currentIndex();
    int teren = terenBox->currentIndex();
    int wladze = wladzeBox->currentIndex();
    int iloscStudentow = iloscStudentowBox->currentIndex();
    int stosunekMK = stosunekMKBox->currentIndex();
    int wydatki = wydatkiBox->currentIndex();
    int procentFinansowanych = procentFinansowanychBox->currentIndex();
    int liczbaAplikujacych = liczbaAplikujacychBox->currentIndex();
    int procentPrzyjetych = procentPrzyjetychBox->currentIndex();
    int jakoscUczelni = jakoscUczelniBox->currentIndex();
    int stypendia     = stypendiaBox->currentIndex();
    int jakoscZycia = jakoscZyciaBox->currentIndex();
    int kierunek = kierunekBox->currentIndex();

    query[0] = stan;
    query[1] = teren;
    query[2] = wladze;
    query[3] = iloscStudentow;
    query[4] = stosunekMK;
    query[5] = wydatki;
    query[6] = procentFinansowanych;
    query[7] = liczbaAplikujacych;
    query[8] = procentPrzyjetych;
    query[9] = jakoscUczelni;
    query[10] = stypendia;
    query[11] = jakoscZycia;
    query[12] = kierunek;

//    for(int i = 0 ; i < 11; ++i)
//        query[i] = 3;

    vector<float> fQuery = data->getWeightedQuery(this->query);
    knn->setQuery(fQuery);

    cout<<"stan="<<stan<<endl;

    intvec result = knn->getResult();

    cout<<"Result index:"<<result[0]<<endl;


    stringvec resultRecord = data->getRecord(result[0]);

    for(int i = 0 ; i < resultRecord.size() ; ++i)
        cout<<resultRecord[i]<<" ";
    cout<<endl;

    showResult(resultRecord);

}

void MainWidget::showResult(stringvec result){
    QString wynik;

    wynik.append("Uniwersytet: ");
    wynik.append(result[0].c_str());  wynik.append("\n");

    wynik.append("Stan: ");
    wynik.append(result[1].c_str());  wynik.append("\n");

    wynik.append("Teren: ");
    wynik.append(result[2].c_str());  wynik.append("\n");

    wynik.append("Wladze: ");
    wynik.append(result[3].c_str());  wynik.append("\n");

    wynik.append("Ilosc studentow (w tys): ");
    wynik.append(result[4].c_str());  wynik.append("\n");

    wynik.append("Stosunek MK w %: ");
    wynik.append(result[5].c_str());  wynik.append("\n");

    wynik.append("student:faculty : ");
    wynik.append(result[6].c_str());  wynik.append("\n");

    wynik.append("sat verbal: ");
    wynik.append(result[7].c_str());  wynik.append("\n");

    wynik.append("sat math: ");
    wynik.append(result[8].c_str());  wynik.append("\n");

    wynik.append("Wydatki w tys: ");
    wynik.append(result[9].c_str());  wynik.append("\n");

    wynik.append("Procent pobierajacych dofinansowanie: ");
    wynik.append(result[10].c_str());  wynik.append("\n");

    wynik.append("Liczba aplikujacych w tys: ");
    wynik.append(result[11].c_str());  wynik.append("\n");

    wynik.append("Procent uczesnictwa: ");
    wynik.append(result[12].c_str());  wynik.append("\n");

    wynik.append("Procent dostajacych sie: ");
    wynik.append(result[13].c_str());  wynik.append("\n");

    wynik.append("Jakosc uczelni 1-5: ");
    wynik.append(result[14].c_str());  wynik.append("\n");

    wynik.append("Stypendia 1-5:");
    wynik.append(result[15].c_str());  wynik.append("\n");

    wynik.append("Jakosc zycia 1-5:");
    wynik.append(result[16].c_str());  wynik.append("\n");

    wynik.append("Glowne kierunki: ");
    for(int i = 17 ; i < result.size() ; ++i){
      wynik.append(result[i].c_str());
      wynik.append(" ,");
    }

    wynikText->setText(wynik);
    mainLayout->addWidget(wynikLabel);
    mainLayout->addWidget(wynikText);
}


MainWidget::~MainWidget()
{
    delete ui;
}
